package cn.ffcs.uec.selfstaff.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Components;
import org.zkoss.zul.Filedownload;

import cn.ffcs.raptornuke.plugin.common.zk.ctrl.BasePortletComposer;
import cn.ffcs.raptornuke.plugin.common.zk.util.ZkUtil;
import cn.ffcs.uec.common.util.EnvPath;
import cn.ffcs.uec.selfstaff.action.bean.PerortListDownloadBean;
import cn.ffcs.uom.common.util.DateUtil;
import cn.ffcs.uom.common.util.ListboxUtils;
import cn.ffcs.uom.common.vo.NodeVo;

/**
 * 统计报表清单下载
 * 
 * @Title:
 * @Description:
 * @author Wang Yiren
 * @版权 FFCS（C） 2017
 * @date 2018年3月19日
 */
@Controller
@Scope("prototype")
public class ReportListDownloadComposer extends BasePortletComposer {

	private static final long serialVersionUID = -3113811658347567503L;

	private PerortListDownloadBean bean = new PerortListDownloadBean();

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);
		Components.wireVariables(comp, bean);
	}

	/**
	 * 初始化
	 * 
	 * @throws Exception
	 */
	public void onCreate$perortListDownloadMainWin() throws Exception {
		this.bindCombobox();
	}

	/**
	 * 统计报表清单下载
	 */
	public void onDownload() {
		Date monthIdDate = bean.getMonthId().getValue();
		if (monthIdDate == null) {
			ZkUtil.showError("请选择：月表账期", "温馨提示");
			return;
		}
		// 日/月表按钮
		int index = bean.getRadiogroup().getSelectedIndex();
		// 格式化日期
		String monthId = DateUtil.getYYYYMMDD(monthIdDate);
		// index == 0 表示月
		if (index == 0) {
			// 月账期--201801
			String monthIdMonth = monthId.substring(0, 6);
			// 获取选择的清单
			int selectedIndex = bean.getReportList().getSelectedIndex();
			switch (selectedIndex) {
			case 1:// 组织信息表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_ORG_ORGS");
				break;
			case 2:// 部门信息表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_DEPT");
				break;
			case 3:// 人员信息表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_PSNDOC");
				break;
			case 4:// 任职信息表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_JOB");
				break;
			case 5:// 考核信息表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_ASS");
				break;
			case 6:// 奖励信息表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_ENC");
				break;
			case 7:// 处罚信息表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_PUN");
				break;
			case 8:// 专家人才表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_GLBDEF6");
				break;
			case 9:// 薪酬发放表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_WA_DATA");
				break;
			case 10:// 岗级变动表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_HI_WADOC");
				break;
			default:
				break;
			}
		} else if (index == 1) {
			// 日账期：20180723
			String monthIdMonth = monthId;
			// 获取选择的清单
			int selectedIndex = bean.getReportList().getSelectedIndex();
			switch (selectedIndex) {
			case 1:// 组织信息表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_ORG_ORGS");
				break;
			case 2:// 部门信息表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_DEPT");
				break;
			case 3:// 人员信息表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_PSNDOC");
				break;
			case 4:// 任职信息表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_JOB");
				break;
			case 5:// 考核信息表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_ASS");
				break;
			case 6:// 奖励信息表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_ENC");
				break;
			case 7:// 处罚信息表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_PUN");
				break;
			case 8:// 专家人才表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_GLBDEF6");
				break;
			case 9:// 薪酬发放表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_WA_DATA");
				break;
			case 10:// 岗级变动表
				reportListDown(selectedIndex, monthIdMonth, "VIEW_TJBB_HI_WADOC");
				break;
			default:
				break;
			}
		}

	}

	/**
	 * 绑定下拉框 绑定combobox
	 */
	private void bindCombobox() {
		List<NodeVo> nodeVoReportList = new ArrayList<NodeVo>();
		String[][] perortList = { { "1", "组织信息表" }, { "2", "部门信息表" }, { "3", "人员信息表" }, { "4", "任职信息表" },
				{ "5", "考核信息表" }, { "6", "奖励信息表" }, { "7", "处罚信息表" }, { "8", "专家人才表" }, { "9", "薪酬发放表" },
				{ "10", "岗级变动表" }

		};
		for (int i = 0; i < perortList.length; i++) {
			NodeVo nodeVo = new NodeVo();
			for (int j = 0; j < 1; j++) {
				nodeVo.setId(perortList[i][j]);
				nodeVo.setName(perortList[i][j + 1]);
			}
			nodeVoReportList.add(nodeVo);
		}
		ListboxUtils.rendererForEdit(bean.getReportList(), nodeVoReportList);
	}

	/**
	 * 报表下载
	 * 
	 * @Description:
	 * @author Wang Yiren
	 * @date 2018年3月19日
	 */
	public void reportListDown(int i, String monthId, String reportListName) {
		// 获取服务器文件
		String filePath = EnvPath.proPath + monthId + "_" + reportListName + ".csv";// 20180723_VIEW_TJBB_ORG_ORGS.csv
		File file = new File(filePath);
		if (file.exists()) {
			try {
				// 设置字符集
				String charset = "UTF-8";
				// 编码后文件名
				String encodedName = null;
				String realName = this.getNamebyIndex(i);
				encodedName = URLEncoder.encode(realName + ".csv", charset);
				// 将空格替换为+号
				encodedName = encodedName.replace("%20", "+");
				// 将文件转化为文件输入流
				FileInputStream in = new FileInputStream(file);
				// 掉zk的浏览器下载方法，进行下载
				Filedownload.save(in, "application/octet-stream", encodedName);
			} catch (FileNotFoundException e) {
				ZkUtil.showError("下载清单失败", "系统提示");
				e.getMessage();
			} catch (IOException e) {
				ZkUtil.showError("下载清单失败", "系统提示");
				e.getMessage();
			} catch (Exception e) {
				ZkUtil.showError("下载清单失败", "系统提示");
				e.getMessage();
			}
		} else {
			ZkUtil.showError("下载清单失败", "温馨提示");
		}
	}

	/**
	 * 通过脚标获取值
	 * 
	 * @Description:
	 * @author Wang Yiren
	 * @date 2018年3月19日
	 * @param i
	 * @return
	 */
	public String getNamebyIndex(int i) {
		String indexName = null;
		String[] list = { "组织信息表", "部门信息表", "人员信息表", "任职信息表", "考核信息表", "奖励信息表", "处罚信息表", "专家人才表", "薪酬发放表", "岗级变动表" };
		// 由于listbox是的脚标是从1开始的
		if (i <= list.length) {
			indexName = list[i - 1];
			return indexName;
		}
		return "";
	}


	/**
	 * 重置
	 * 
	 * @Description:
	 * @author Wang Yiren
	 * @date 2018年3月19日
	 */
	public void onReset() {
		bean.getMonthId().setValue(null);
		// ListboxUtils.clearListbox(this.bean.getReportList());
	}

}
